Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor #996 #1002

Merged
merged 12 commits into from
Aug 4, 2016
Merged

refactor #996 #1002

merged 12 commits into from
Aug 4, 2016

Conversation

sarovin
Copy link
Contributor

@sarovin sarovin commented Aug 2, 2016

No description provided.

@mention-bot
Copy link

@sarovin, thanks for your PR! By analyzing the annotation information on this pull request, we identified @ms88privat, @Kerumen and @aksonov to be potential reviewers

@sarovin
Copy link
Contributor Author

sarovin commented Aug 2, 2016

@aksonov Is it right?

@aksonov
Copy link
Owner

aksonov commented Aug 2, 2016

@sarovin Yes, looks nice. Could you verify that it works for your scenarios? Example project?

@sarovin
Copy link
Contributor Author

sarovin commented Aug 2, 2016

It work fine for me.
My scenarios is here #952

@zxcpoiu
Copy link
Contributor

zxcpoiu commented Aug 2, 2016

I got the same with the following example, still figuring it out.

Is this.setState({ navigationState }); always supposed to be the selected navigationState ( selected[0] )?

// --- this got infinite loop if switch selector returns 'home'

<Scene key="modal" component={Modal} >
    <Scene key="root">
        <Scene key="switch" initial={true} component={Switch} tabs={true} unmountScenes={true} selector={switchSelector}>
            <Scene key="login" initial={true} type="replace" />
            <Scene key="home" tabs={true} type="replace">
                <Scene key="tab1" initial={true} />
                <Scene key="tab2" initial={false} />
            </Scene>
        </Scene>
    </Scene>
</Scene>

@sarovin
Copy link
Contributor Author

sarovin commented Aug 2, 2016

@zxcpoiu I don't understand your problem...i have tested with your scenarios and it work fine.

if (index === -1) console.error(`A scene for key “${selectedKey}” does not exist.`);
Actions[selectedKey]();
}
this.setState({ navigationState });
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it will do this.setState() in the end using variable navigationState ( a child of navState )
so if the second time you are entering this.updateState(), navState would never match scene key returned by selector.

the first time you entered this.updateState(): navState.key is 'switch', and it's children are ['login', 'home']
the second time you entered this.updateState(): navState.key is 'home', and it's children are ['tab1', 'tab2']

my question: is navState supposed to be the child one eventually ?

@zxcpoiu
Copy link
Contributor

zxcpoiu commented Aug 2, 2016

Hmm...I guess it's a redux triggered rendering issue.
I can't use older version of Switch before and never dig into it.
However, I noticed that there is a newer version of Switch recently, and it works.

@aksonov
Copy link
Owner

aksonov commented Aug 2, 2016

@zxcpoiu Does @sarovin version work for you?

@zxcpoiu
Copy link
Contributor

zxcpoiu commented Aug 2, 2016

yeah, it works!

@zxcpoiu
Copy link
Contributor

zxcpoiu commented Aug 2, 2016

except double render issue, turns out that it can NOT be used with type="replace" in the test case above.
thanks guys

@zxcpoiu
Copy link
Contributor

zxcpoiu commented Aug 2, 2016

just side note:
not sure why, the render() times of my component are 2~3 times than the Switch version in 3.32.0
but no problems so far.

@sarovin
Copy link
Contributor Author

sarovin commented Aug 2, 2016

@zxcpoiu i try to fix it

@sarovin
Copy link
Contributor Author

sarovin commented Aug 2, 2016

@zxcpoiu Can you try now?
@aksonov this is completed for me...

@zxcpoiu
Copy link
Contributor

zxcpoiu commented Aug 2, 2016

@sarovin

Oops, I can try it 12 hours later.
It looks fine btw.

Thanks for your work!!

@aksonov
Copy link
Owner

aksonov commented Aug 2, 2016

"just side note:
not sure why, the render() times of my component are 2~3 times than the Switch version in 3.32.0
but no problems so far." - actually it was initial reason to migrate to new Switch...

@blackxored
Copy link
Contributor

blackxored commented Aug 2, 2016

This looks promising. Have you tried having a view within a tab trigger an action for one of the external views (the children of the root modal scene)?

EDIT: For example

<Scene key="root" component={Modal}>
  <Scene key="switcher" tabs ...>
    <Scene key="home" tabs>
      ...
    </Scene>
    ...
  </Scene>
  <Scene key="profileDialog" ...>
</Scene>

having a scene that's a child to "home" trigger Actions.profileDialog().

@sarovin
Copy link
Contributor Author

sarovin commented Aug 2, 2016

@blackxored with modal scene there is a problem.
Can you help me?

@blackxored
Copy link
Contributor

I'm not sure it's related to these changes, as I've experienced this before.

@aksonov
Copy link
Owner

aksonov commented Aug 3, 2016

@sarovin Unfortunately it doesn't work for me - infinitive loop (because Actions[selectedKey] re-renders Switch and call updateState again and so so). I'm using mobx and my selector is reactive function. With current version of Switch it works well (because it doesn't call Actions)....

@sarovin
Copy link
Contributor Author

sarovin commented Aug 3, 2016

@aksonov I try to fix it

@aksonov
Copy link
Owner

aksonov commented Aug 3, 2016

@sarovin Could you just modify current Switch to add Actions call there (if index!=old index) ?

@sarovin
Copy link
Contributor Author

sarovin commented Aug 3, 2016

@aksonov
From this

if (navigationState.key !== navState.children[navState.index].key) {
      if (props.unmountScenes) {
        Actions[selectedKey]({ unmountScenes: true });
      } else {
        Actions[selectedKey]();
      }
    }

to this??

if (navigationState.key !== navState.children[navState.index].key && navigationState.index !== navState.children[navState.index].index) {
      if (props.unmountScenes) {
        Actions[selectedKey]({ unmountScenes: true });
      } else {
        Actions[selectedKey]();
      }
    }

@aksonov
Copy link
Owner

aksonov commented Aug 3, 2016

@sarovin Most interesting thing that Actions[selectedKey] is never called for my app. I don't understand why selectedKey is always equal to current sceneKey...

@aksonov
Copy link
Owner

aksonov commented Aug 3, 2016

When I'm trying just to modify current Switch i see the same - index is always equal to current index.

@aksonov
Copy link
Owner

aksonov commented Aug 3, 2016

Could you try following:

import React, { Component, PropTypes } from 'react';
import DefaultRenderer from './DefaultRenderer';
import TabBar from './TabBar';
import Actions from './Actions';

export default function Switch(props) {
  const navState = props.navigationState;

  const selector = props.selector;
  if (!selector) console.error('Selector should be defined.');

  const selectedKey = selector(props);
  if (!selectedKey) console.error('Selector should return key.');

  const selected = navState.children.filter(el => el.sceneKey === selectedKey);
  if (!selected) console.error(`A scene for key “${selectedKey}” does not exist.`);

  let index = -1;
  navState.children.forEach((el, i) => {
    if (el.sceneKey === selectedKey) {
      index = i;
    }
  });
  if (index === -1) console.error(`A scene for key “${selectedKey}” does not exist.`);

  let navigationState = index !== navState.index ? { ...navState, index } : navState;
  if (index !== navState.index) {
    if (props.unmountScenes) {
      Actions[selectedKey]({ unmountScenes: true });
    } else {
      Actions[selectedKey]();
    }
  }
  return (
    <TabBar
      onNavigate={props.onNavigate}
      navigationState={navigationState}
    />
  );
}

Switch.propTypes = {
  navigationState: PropTypes.object,
  onNavigate: PropTypes.func,
  selector: PropTypes.func,
  statem: PropTypes.any,
  unmountScenes: PropTypes.bool,
};

@sarovin
Copy link
Contributor Author

sarovin commented Aug 3, 2016

@aksonov
So we have this error:

Cannot update during an existing state transition (such as within render or another component's constructor). Render methods should be a pure function of props and state; constructor side-effects are an anti-pattern, but can be moved to componentWillMount.

@aksonov
Copy link
Owner

aksonov commented Aug 3, 2016

Maybe Actions should be wrapped into setTimeout also (to avoid warning about setState within render method)

@aksonov
Copy link
Owner

aksonov commented Aug 3, 2016

Any idea how to avoid that? I like this variant because it works with my app just fine.

@aksonov
Copy link
Owner

aksonov commented Aug 3, 2016

Oh, maybe you could return null if index !== navState.index ?

Actions[selectedKey]();
}
}, 10);
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok, will setTimeout with 10 work?

@sarovin
Copy link
Contributor Author

sarovin commented Aug 3, 2016

@aksonov I have a problem with the last implementation. Now not work the resetHistoryStack...

@sarovin
Copy link
Contributor Author

sarovin commented Aug 3, 2016

I think that we must investigate about your implementation...
I don't understand why selectedKey is always equal to current sceneKey in your use case.

@zxcpoiu
Copy link
Contributor

zxcpoiu commented Aug 3, 2016

How about pass sceneKey as a prop into TabBar, and execute it in component Will/Did Mount or will receiveProps if that props exist?

like:

    <TabBar
      onNavigate={props.onNavigate}
      navigationState={navigationState}
      fireAction={ () => Actions[selectedKey]() }
    />

@aksonov
Copy link
Owner

aksonov commented Aug 3, 2016

@zxcpoiu The problem we don't want to render TabBar with old selectedKey.

@sarovin
Copy link
Contributor Author

sarovin commented Aug 3, 2016

@aksonov

Have you any idea about why your scenekey is always egual?
Can you try this?

import React, { Component, PropTypes } from 'react';
import DefaultRenderer from './DefaultRenderer';
import Actions from './Actions';

export default class Switch extends Component {

  static propTypes = {
    navigationState: PropTypes.object,
    onNavigate: PropTypes.func,
    selector: PropTypes.func,
    unmountScenes: PropTypes.bool,
  };

  constructor(props, context) {
    super(props, context);
    this.state = {};
    this.updateState = this.updateState.bind(this);
  }

  componentDidMount() {
    this.updateState(this.props);
  }

  componentWillReceiveProps(props) {
    this.updateState(props);
  }

  shouldComponentUpdate(nextProps, nextState) {
    if (this.state.navigationState !== nextState.navigationState) {
      return true;
    }
    return false;
  }

  updateState(props) {
    const navState = props.navigationState;
    const selector = props.selector;
    if (!selector) console.error('Selector should be defined.');

    const selectedKey = selector(props);
    if (!selectedKey) console.error('Selector should return key.');

    const selected = navState.children.filter(el => el.sceneKey === selectedKey);
    if (!selected) console.error(`A scene for key “${selectedKey}” does not exist.`);

    const navigationState = selected[0];
    if (!navigationState) console.error(`Cannot find a scene with key “${selectedKey}”`);

    console.log(navigationState.name, navigationState.sceneKey);
    console.log(navState.children[navState.index].name, navState.children[navState.index].sceneKey);

    if (navigationState.sceneKey !== navState.children[navState.index].sceneKey) {
      if (props.unmountScenes) {
        Actions[selectedKey]({ unmountScenes: true });
      } else {
        Actions[selectedKey]();
      }
    }

    this.setState({ navigationState });
  }

  render() {
    if (this.state.navigationState) {
      return (
        <DefaultRenderer
          onNavigate={this.props.onNavigate}
          navigationState={this.state.navigationState}
        />
      );
    }
    return null;
  }
}

@aksonov
Copy link
Owner

aksonov commented Aug 3, 2016

No, it doesn't work. The problem that mobx doesn't call componentWillReceiveProps, but just re-render component once observable state is changed. So it works better with pure functions.

Looks like i have equal index because i didn't create deep copy of navigationState...

@aksonov
Copy link
Owner

aksonov commented Aug 3, 2016

@sarovin Sorry, last variant works well. So could I merge it ?

@sarovin
Copy link
Contributor Author

sarovin commented Aug 3, 2016

@aksonov the variant in the last commit? No, not work the resetHistoryStack.
Give me time...

@sarovin
Copy link
Contributor Author

sarovin commented Aug 3, 2016

@aksonov If this is good for everyone you can merge 😫

@aksonov aksonov merged commit d1cbc8a into aksonov:master Aug 4, 2016
@sarovin sarovin deleted the Switch branch August 4, 2016 20:42
aksonov added a commit that referenced this pull request Jul 8, 2017
…#10,#11,#12,#13,#14,#15,#16,#17,#18,#19,#20,#21,#22,#23,#24,#25,#26,#27,#28,#29,#30,#31,#32,#33,#34,#35,#36,#37,#38,#39,#40,#41,#42,#43,#44,#45,#46,#47,#48,#49,#50,#51,#52,#53,#54,#55,#56,#57,#58,#59,#60,#61,#62,#63,#64,#65,#66,#67,#68,#69,#70,#71,#72,#73,#74,#75,#76,#77,#78,#79,#80,#81,#82,#83,#84,#85,#86,#87,#88,#89,#90,#91,#92,#93,#94,#95,#96,#97,#98,#99,#100,#101,#102,#103,#104,#105,#106,#107,#108,#109,#110,#111,#112,#113,#114,#115,#116,#117,#118,#119,#120,#121,#122,#123,#124,#125,#126,#127,#128,#129,#130,#131,#132,#133,#134,#135,#136,#137,#138,#139,#140,#141,#142,#143,#144,#145,#146,#147,#148,#149,#150,#151,#152,#153,#154,#155,#156,#157,#158,#159,#160,#161,#162,#163,#164,#165,#166,#167,#168,#169,#170,#171,#172,#173,#174,#175,#176,#177,#178,#179,#180,#181,#182,#183,#184,#185,#186,#187,#188,#189,#190,#191,#192,#193,#194,#195,#196,#197,#198,#199,#200,#201,#202,#203,#204,#205,#206,#207,#208,#209,#210,#211,#212,#213,#214,#215,#216,#217,#218,#219,#220,#221,#222,#223,#224,#225,#226,#227,#228,#229,#230,#231,#232,#233,#234,#235,#236,#237,#238,#239,#240,#241,#242,#243,#244,#245,#246,#247,#248,#249,#250,#251,#252,#253,#254,#255,#256,#257,#258,#259,#260,#261,#262,#263,#264,#265,#266,#267,#268,#269,#270,#271,#272,#273,#274,#275,#276,#277,#278,#279,#280,#281,#282,#283,#284,#285,#286,#287,#288,#289,#290,#291,#292,#293,#294,#295,#296,#297,#298,#299,#300,#301,#302,#303,#304,#305,#306,#307,#308,#309,#310,#311,#312,#313,#314,#315,#316,#317,#318,#319,#320,#321,#322,#323,#324,#325,#326,#327,#328,#329,#330,#331,#332,#333,#334,#335,#336,#337,#338,#339,#340,#341,#342,#343,#344,#345,#346,#347,#348,#349,#350,#351,#352,#353,#354,#355,#356,#357,#358,#359,#360,#361,#362,#363,#364,#365,#366,#367,#368,#369,#370,#371,#372,#373,#374,#375,#376,#377,#378,#379,#380,#381,#382,#383,#384,#385,#386,#387,#388,#389,#390,#391,#392,#393,#394,#395,#396,#397,#398,#399,#400,#401,#402,#403,#404,#405,#406,#407,#408,#409,#410,#411,#412,#413,#414,#415,#416,#417,#418,#419,#420,#421,#422,#423,#424,#425,#426,#427,#428,#429,#430,#431,#432,#433,#434,#435,#436,#437,#438,#439,#440,#441,#442,#443,#444,#445,#446,#447,#448,#449,#450,#451,#452,#453,#454,#455,#456,#457,#458,#459,#460,#461,#462,#463,#464,#465,#466,#467,#468,#469,#470,#471,#472,#473,#474,#475,#476,#477,#478,#479,#480,#481,#482,#483,#484,#485,#486,#487,#488,#489,#490,#491,#492,#493,#494,#495,#496,#497,#498,#499,#500,#501,#502,#503,#504,#505,#506,#507,#508,#509,#510,#511,#512,#513,#514,#515,#516,#517,#518,#519,#520,#521,#522,#523,#524,#525,#526,#527,#528,#529,#530,#531,#532,#533,#534,#535,#536,#537,#538,#539,#540,#541,#542,#543,#544,#545,#546,#547,#548,#549,#550,#551,#552,#553,#554,#555,#556,#557,#558,#559,#560,#561,#562,#563,#564,#565,#566,#567,#568,#569,#570,#571,#572,#573,#574,#575,#576,#577,#578,#579,#580,#581,#582,#583,#584,#585,#586,#587,#588,#589,#590,#591,#592,#593,#594,#595,#596,#597,#598,#599,#600,#601,#602,#603,#604,#605,#606,#607,#608,#609,#610,#611,#612,#613,#614,#615,#616,#617,#618,#619,#620,#621,#622,#623,#624,#625,#626,#627,#628,#629,#630,#631,#632,#633,#634,#635,#636,#637,#638,#639,#640,#641,#642,#643,#644,#645,#646,#647,#648,#649,#650,#651,#652,#653,#654,#655,#656,#657,#658,#659,#660,#661,#662,#663,#664,#665,#666,#667,#668,#669,#670,#671,#672,#673,#674,#675,#676,#677,#678,#679,#680,#681,#682,#683,#684,#685,#686,#687,#688,#689,#690,#691,#692,#693,#694,#695,#696,#697,#698,#699,#700,#701,#702,#703,#704,#705,#706,#707,#708,#709,#710,#711,#712,#713,#714,#715,#716,#717,#718,#719,#720,#721,#722,#723,#724,#725,#726,#727,#728,#729,#730,#731,#732,#733,#734,#735,#736,#737,#738,#739,#740,#741,#742,#743,#744,#745,#746,#747,#748,#749,#750,#751,#752,#753,#754,#755,#756,#757,#758,#759,#760,#761,#762,#763,#764,#765,#766,#767,#768,#769,#770,#771,#772,#773,#774,#775,#776,#777,#778,#779,#780,#781,#782,#783,#784,#785,#786,#787,#788,#789,#790,#791,#792,#793,#794,#795,#796,#797,#798,#799,#800,#801,#802,#803,#804,#805,#806,#807,#808,#809,#810,#811,#812,#813,#814,#815,#816,#817,#818,#819,#820,#821,#822,#823,#824,#825,#826,#827,#828,#829,#830,#831,#832,#833,#834,#835,#836,#837,#838,#839,#840,#841,#842,#843,#844,#845,#846,#847,#848,#849,#850,#851,#852,#853,#854,#855,#856,#857,#858,#859,#860,#861,#862,#863,#864,#865,#866,#867,#868,#869,#870,#871,#872,#873,#874,#875,#876,#877,#878,#879,#880,#881,#882,#883,#884,#885,#886,#887,#888,#889,#890,#891,#892,#893,#894,#895,#896,#897,#898,#899,#900,#901,#902,#903,#904,#905,#906,#907,#908,#909,#910,#911,#912,#913,#914,#915,#916,#917,#918,#919,#920,#921,#922,#923,#924,#925,#926,#927,#928,#929,#930,#931,#932,#933,#934,#935,#936,#937,#938,#939,#940,#941,#942,#943,#944,#945,#946,#947,#948,#949,#950,#951,#952,#953,#954,#955,#956,#957,#958,#959,#960,#961,#962,#963,#964,#965,#966,#967,#968,#969,#970,#971,#972,#973,#974,#975,#976,#977,#978,#979,#980,#981,#982,#983,#984,#985,#986,#987,#988,#989,#990,#991,#992,#993,#994,#995,#996,#997,#998,#999,#1000,#1001,#1002,#1003,#1004,#1005,#1006,#1007,#1008,#1009,#1010,#1011,#1012,#1013,#1014,#1015,#1016,#1017,#1018,#1019,#1020,#1021,#1022,#1023,#1024,#1025,#1026,#1027,#1028,#1029,#1030,#1031,#1032,#1033,#1034,#1035,#1036,#1037,#1038,#1039,#1040,#1041,#1042,#1043,#1044,#1045,#1046,#1047,#1048,#1049,#1050,#1051,#1052,#1053,#1054,#1055,#1056,#1057,#1058,#1059,#1060,#1061,#1062,#1063,#1064,#1065,#1066,#1067,#1068,#1069,#1070,#1071,#1072,#1073,#1074,#1075,#1076,#1077,#1078,#1079,#1080,#1081,#1082,#1083,#1084,#1085,#1086,#1087,#1088,#1089,#1090,#1091,#1092,#1093,#1094,#1095,#1096,#1097,#1098,#1099,#1100,#1101,#1102,#1103,#1104,#1105,#1106,#1107,#1108,#1109,#1110,#1111,#1112,#1113,#1114,#1115,#1116,#1117,#1118,#1119,#1120,#1121,#1122,#1123,#1124,#1125,#1126,#1127,#1128,#1129,#1130,#1131,#1132,#1133,#1134,#1135,#1136,#1137,#1138,#1139,#1140,#1141,#1142,#1143,#1144,#1145,#1146,#1147,#1148,#1149,#1150,#1151,#1152,#1153,#1154,#1155,#1156,#1157,#1158,#1159,#1160,#1161,#1162,#1163,#1164,#1165,#1166,#1167,#1168,#1169,#1170,#1171,#1172,#1173,#1174,#1175,#1176,#1177,#1178,#1179,#1180,#1181,#1182,#1183,#1184,#1185,#1186,#1187,#1188,#1189,#1190,#1191,#1192,#1193,#1194,#1195,#1196,#1197,#1198,#1199,#1200,#1201,#1202,#1203,#1204,#1205,#1206,#1207,#1208,#1209,#1210,#1211,#1212,#1213,#1214,#1215,#1216,#1217,#1218,#1219,#1220,#1221,#1222,#1223,#1224,#1225,#1226,#1227,#1228,#1229,#1230,#1231,#1232,#1233,#1234,#1235,#1236,#1237,#1238,#1239,#1240,#1241,#1242,#1243,#1244,#1245,#1246,#1247,#1248,#1249,#1250,#1251,#1252,#1253,#1254,#1255,#1256,#1257,#1258,#1259,#1260,#1261,#1262,#1263,#1264,#1265,#1266,#1267,#1268,#1269,#1270,#1271,#1272,#1273,#1274,#1275,#1276,#1277,#1278,#1279,#1280,#1281,#1282,#1283,#1284,#1285,#1286,#1287,#1288,#1289,#1290,#1291,#1292,#1293,#1294,#1295,#1296,#1297,#1298,#1299,#1300,#1301,#1302,#1303,#1304,#1305,#1306,#1307,#1308,#1309,#1310,#1311,#1312,#1313,#1314,#1315,#1316,#1317,#1318,#1319,#1320,#1321,#1322,#1323,#1324,#1325,#1326,#1327,#1328,#1329,#1330,#1331,#1332,#1333,#1334,#1335,#1336,#1337,#1338,#1339,#1340,#1341,#1342,#1343,#1344,#1345,#1346,#1347,#1348,#1349,#1350,#1351,#1352,#1353,#1354,#1355,#1356,#1357,#1358,#1359,#1360,#1361,#1362,#1363,#1364,#1365,#1366,#1367,#1368,#1369,#1370,#1371,#1372,#1373,#1374,#1375,#1376,#1377,#1378,#1379,#1380,#1381,#1382,#1383,#1384,#1385,#1386,#1387,#1388,#1389,#1390,#1391,#1392,#1393,#1394,#1395,#1396,#1397,#1398,#1399,#1400,#1401,#1402,#1403,#1404,#1405,#1406,#1407,#1408,#1409,#1410,#1411,#1412,#1413,#1414,#1415,#1416,#1417,#1418,#1419,#1420,#1421,#1422,#1423,#1424,#1425,#1426,#1427,#1428,#1429,#1430,#1431,#1432,#1433,#1434,#1435,#1436,#1437,#1438,#1439,#1440,#1441,#1442,#1443,#1444,#1445,#1446,#1447,#1448,#1449,#1450,#1451,#1452,#1453,#1454,#1455,#1456,#1457,#1458,#1459,#1460,#1461,#1462,#1463,#1464,#1465,#1466,#1467,#1468,#1469,#1470,#1471,#1472,#1473,#1474,#1475,#1476,#1477,#1478,#1479,#1480,#1481,#1482,#1483,#1484,#1485,#1486,#1487,#1488,#1489,#1490,#1491,#1492,#1493,#1494,#1495,#1496,#1497,#1498,#1499,#1500,#1501,#1502,#1503,#1504,#1505,#1506,#1507,#1508,#1509,#1510,#1511,#1512,#1513,#1514,#1515,#1516,#1517,#1518,#1519,#1520,#1521,#1522,#1523,#1524,#1525,#1526,#1527,#1528,#1529,#1530,#1531,#1532,#1533,#1534,#1535,#1536,#1537,#1538,#1539,#1540,#1541,#1542,#1543,#1544,#1545,#1546,#1547,#1548,#1549,#1550,#1551,#1552,#1553,#1554,#1555,#1556,#1557,#1558,#1559,#1560,#1561,#1562,#1563,#1564,#1565,#1566,#1567,#1568,#1569,#1570,#1571,#1572,#1573,#1574,#1575,#1576,#1577,#1578,#1579,#1580,#1581,#1582,#1583,#1584,#1585,#1586,#1587,#1588,#1589,#1590,#1591,#1592,#1593,#1594,#1595,#1596,#1597,#1598,#1599,#1600,#1601,#1602,#1603,#1604,#1605,#1606,#1607,#1608,#1609,#1610,#1611,#1612,#1613,#1614,#1615,#1616,#1617,#1618,#1619,#1620,#1621,#1622,#1623,#1624,#1625,#1626,#1627,#1628,#1629,#1630,#1631,#1632,#1633,#1634,#1635,#1636,#1637,#1638,#1639,#1640,#1641,#1642,#1643,#1644,#1645,#1646,#1647,#1648,#1649,#1650,#1651,#1652,#1653,#1654,#1655,#1656,#1657,#1658,#1659,#1660,#1661,#1662,#1663,#1664,#1665,#1666,#1667,#1668,#1669,#1670,#1671,#1672,#1673,#1674,#1675,#1676,#1677,#1678,#1679,#1680,#1681,#1682,#1683,#1684,#1685,#1686,#1687,#1688,#1689,#1690,#1691,#1692,#1693,#1694,#1695,#1696,#1697,#1698,#1699,#1700,#1701,#1702,#1703,#1704,#1705,#1706,#1707,#1708,#1709,#1710,#1711,#1712,#1713,#1714,#1715,#1716,#1717,#1718,#1719,#1720,#1721,#1722,#1723,#1724,#1725,#1726,#1727,#1728,#1729,#1730,#1731,#1732,#1733,#1734,#1735,#1736,#1737,#1738,#1739,#1740,#1741,#1742,#1743,#1744,#1745,#1746,#1747,#1748,#1749,#1750,#1751,#1752,#1753,#1754,#1755,#1756,#1757,#1758,#1759,#1760,#1761,#1762,#1763,#1764,#1765,#1766,#1767,#1768,#1769,#1770,#1771,#1772,#1773,#1774,#1775,#1776,#1777,#1778,#1779,#1780,#1781,#1782,#1783,#1784,#1785,#1786,#1787,#1788,#1789,#1790,#1791,#1792,#1793,#1794,#1795,#1796,#1797,#1798,#1799,#1800,#1801,#1802,#1803,#1804,#1805,#1806,#1807,#1808,#1809,#1810,#1811,#1812,#1813,#1814,#1815,#1816,#1817,#1818,#1819,#1820,#1821,#1822,#1823,#1824,#1825,#1826,#1827,#1828,#1829,#1830,#1831,#1832,#1833,#1834,#1835,#1836,#1837,#1838,#1839,#1840,#1841,#1842,#1843,#1844,#1845,#1846,#1847,#1848,#1849,#1850,#1851,#1852,#1853,#1854,#1855,#1856,#1857,#1858,#1859,#1860,#1861,#1862,#1863,#1864,#1865,#1866,#1867,#1868,#1869,#1870,#1871,#1872,#1873,#1874,#1875,#1876,#1877,#1878,#1879,#1880,#1881,#1882,#1883,#1884,#1885,#1886,#1887,#1888,#1889,#1890,#1891,#1892,#1893,#1894,#1895,#1896,#1897,#1898,#1899,#1900,#1901,#1902,#1903,#1904,#1905,#1906,#1907,#1908,#1909,#1910,#1911,#1912,#1913,#1914,#1915,#1916,#1917,#1918,#1919,#1920,#1921,#1922,#1923,#1924,#1925,#1926,#1927,#1928,#1929,#1930,#1931,#1932,#1933,#1934,#1935,#1936,#1937,#1938,#1939,#1940,#1941,#1942,#1943,#1944,#1945,#1946,#1947,#1948,#1949,#1950,#1951,#1952,#1953,#1954,#1955,#1956,#1957,#1958,#1959,#1960,#1961,#1962,#1963,#1964,#1965,#1966,#1967,#1968,#1969,#1970,#1971,#1972,#1973

V4 announcement, v3 is obsolete now.
aksonov added a commit that referenced this pull request Jul 8, 2017
…loses #7,closes #8,closes #9,closes #10,closes #11,closes #12,closes #13,closes #14,closes #15,closes #16,closes #17,closes #18,closes #19,closes #20,closes #21,closes #22,closes #23,closes #24,closes #25,closes #26,closes #27,closes #28,closes #29,closes #30,closes #31,closes #32,closes #33,closes #34,closes #35,closes #36,closes #37,closes #38,closes #39,closes #40,closes #41,closes #42,closes #43,closes #44,closes #45,closes #46,closes #47,closes #48,closes #49,closes #50,closes #51,closes #52,closes #53,closes #54,closes #55,closes #56,closes #57,closes #58,closes #59,closes #60,closes #61,closes #62,closes #63,closes #64,closes #65,closes #66,closes #67,closes #68,closes #69,closes #70,closes #71,closes #72,closes #73,closes #74,closes #75,closes #76,closes #77,closes #78,closes #79,closes #80,closes #81,closes #82,closes #83,closes #84,closes #85,closes #86,closes #87,closes #88,closes #89,closes #90,closes #91,closes #92,closes #93,closes #94,closes #95,closes #96,closes #97,closes #98,closes #99,closes #100,closes #101,closes #102,closes #103,closes #104,closes #105,closes #106,closes #107,closes #108,closes #109,closes #110,closes #111,closes #112,closes #113,closes #114,closes #115,closes #116,closes #117,closes #118,closes #119,closes #120,closes #121,closes #122,closes #123,closes #124,closes #125,closes #126,closes #127,closes #128,closes #129,closes #130,closes #131,closes #132,closes #133,closes #134,closes #135,closes #136,closes #137,closes #138,closes #139,closes #140,closes #141,closes #142,closes #143,closes #144,closes #145,closes #146,closes #147,closes #148,closes #149,closes #150,closes #151,closes #152,closes #153,closes #154,closes #155,closes #156,closes #157,closes #158,closes #159,closes #160,closes #161,closes #162,closes #163,closes #164,closes #165,closes #166,closes #167,closes #168,closes #169,closes #170,closes #171,closes #172,closes #173,closes #174,closes #175,closes #176,closes #177,closes #178,closes #179,closes #180,closes #181,closes #182,closes #183,closes #184,closes #185,closes #186,closes #187,closes #188,closes #189,closes #190,closes #191,closes #192,closes #193,closes #194,closes #195,closes #196,closes #197,closes #198,closes #199,closes #200,closes #201,closes #202,closes #203,closes #204,closes #205,closes #206,closes #207,closes #208,closes #209,closes #210,closes #211,closes #212,closes #213,closes #214,closes #215,closes #216,closes #217,closes #218,closes #219,closes #220,closes #221,closes #222,closes #223,closes #224,closes #225,closes #226,closes #227,closes #228,closes #229,closes #230,closes #231,closes #232,closes #233,closes #234,closes #235,closes #236,closes #237,closes #238,closes #239,closes #240,closes #241,closes #242,closes #243,closes #244,closes #245,closes #246,closes #247,closes #248,closes #249,closes #250,closes #251,closes #252,closes #253,closes #254,closes #255,closes #256,closes #257,closes #258,closes #259,closes #260,closes #261,closes #262,closes #263,closes #264,closes #265,closes #266,closes #267,closes #268,closes #269,closes #270,closes #271,closes #272,closes #273,closes #274,closes #275,closes #276,closes #277,closes #278,closes #279,closes #280,closes #281,closes #282,closes #283,closes #284,closes #285,closes #286,closes #287,closes #288,closes #289,closes #290,closes #291,closes #292,closes #293,closes #294,closes #295,closes #296,closes #297,closes #298,closes #299,closes #300,closes #301,closes #302,closes #303,closes #304,closes #305,closes #306,closes #307,closes #308,closes #309,closes #310,closes #311,closes #312,closes #313,closes #314,closes #315,closes #316,closes #317,closes #318,closes #319,closes #320,closes #321,closes #322,closes #323,closes #324,closes #325,closes #326,closes #327,closes #328,closes #329,closes #330,closes #331,closes #332,closes #333,closes #334,closes #335,closes #336,closes #337,closes #338,closes #339,closes #340,closes #341,closes #342,closes #343,closes #344,closes #345,closes #346,closes #347,closes #348,closes #349,closes #350,closes #351,closes #352,closes #353,closes #354,closes #355,closes #356,closes #357,closes #358,closes #359,closes #360,closes #361,closes #362,closes #363,closes #364,closes #365,closes #366,closes #367,closes #368,closes #369,closes #370,closes #371,closes #372,closes #373,closes #374,closes #375,closes #376,closes #377,closes #378,closes #379,closes #380,closes #381,closes #382,closes #383,closes #384,closes #385,closes #386,closes #387,closes #388,closes #389,closes #390,closes #391,closes #392,closes #393,closes #394,closes #395,closes #396,closes #397,closes #398,closes #399,closes #400,closes #401,closes #402,closes #403,closes #404,closes #405,closes #406,closes #407,closes #408,closes #409,closes #410,closes #411,closes #412,closes #413,closes #414,closes #415,closes #416,closes #417,closes #418,closes #419,closes #420,closes #421,closes #422,closes #423,closes #424,closes #425,closes #426,closes #427,closes #428,closes #429,closes #430,closes #431,closes #432,closes #433,closes #434,closes #435,closes #436,closes #437,closes #438,closes #439,closes #440,closes #441,closes #442,closes #443,closes #444,closes #445,closes #446,closes #447,closes #448,closes #449,closes #450,closes #451,closes #452,closes #453,closes #454,closes #455,closes #456,closes #457,closes #458,closes #459,closes #460,closes #461,closes #462,closes #463,closes #464,closes #465,closes #466,closes #467,closes #468,closes #469,closes #470,closes #471,closes #472,closes #473,closes #474,closes #475,closes #476,closes #477,closes #478,closes #479,closes #480,closes #481,closes #482,closes #483,closes #484,closes #485,closes #486,closes #487,closes #488,closes #489,closes #490,closes #491,closes #492,closes #493,closes #494,closes #495,closes #496,closes #497,closes #498,closes #499,closes #500,closes #501,closes #502,closes #503,closes #504,closes #505,closes #506,closes #507,closes #508,closes #509,closes #510,closes #511,closes #512,closes #513,closes #514,closes #515,closes #516,closes #517,closes #518,closes #519,closes #520,closes #521,closes #522,closes #523,closes #524,closes #525,closes #526,closes #527,closes #528,closes #529,closes #530,closes #531,closes #532,closes #533,closes #534,closes #535,closes #536,closes #537,closes #538,closes #539,closes #540,closes #541,closes #542,closes #543,closes #544,closes #545,closes #546,closes #547,closes #548,closes #549,closes #550,closes #551,closes #552,closes #553,closes #554,closes #555,closes #556,closes #557,closes #558,closes #559,closes #560,closes #561,closes #562,closes #563,closes #564,closes #565,closes #566,closes #567,closes #568,closes #569,closes #570,closes #571,closes #572,closes #573,closes #574,closes #575,closes #576,closes #577,closes #578,closes #579,closes #580,closes #581,closes #582,closes #583,closes #584,closes #585,closes #586,closes #587,closes #588,closes #589,closes #590,closes #591,closes #592,closes #593,closes #594,closes #595,closes #596,closes #597,closes #598,closes #599,closes #600,closes #601,closes #602,closes #603,closes #604,closes #605,closes #606,closes #607,closes #608,closes #609,closes #610,closes #611,closes #612,closes #613,closes #614,closes #615,closes #616,closes #617,closes #618,closes #619,closes #620,closes #621,closes #622,closes #623,closes #624,closes #625,closes #626,closes #627,closes #628,closes #629,closes #630,closes #631,closes #632,closes #633,closes #634,closes #635,closes #636,closes #637,closes #638,closes #639,closes #640,closes #641,closes #642,closes #643,closes #644,closes #645,closes #646,closes #647,closes #648,closes #649,closes #650,closes #651,closes #652,closes #653,closes #654,closes #655,closes #656,closes #657,closes #658,closes #659,closes #660,closes #661,closes #662,closes #663,closes #664,closes #665,closes #666,closes #667,closes #668,closes #669,closes #670,closes #671,closes #672,closes #673,closes #674,closes #675,closes #676,closes #677,closes #678,closes #679,closes #680,closes #681,closes #682,closes #683,closes #684,closes #685,closes #686,closes #687,closes #688,closes #689,closes #690,closes #691,closes #692,closes #693,closes #694,closes #695,closes #696,closes #697,closes #698,closes #699,closes #700,closes #701,closes #702,closes #703,closes #704,closes #705,closes #706,closes #707,closes #708,closes #709,closes #710,closes #711,closes #712,closes #713,closes #714,closes #715,closes #716,closes #717,closes #718,closes #719,closes #720,closes #721,closes #722,closes #723,closes #724,closes #725,closes #726,closes #727,closes #728,closes #729,closes #730,closes #731,closes #732,closes #733,closes #734,closes #735,closes #736,closes #737,closes #738,closes #739,closes #740,closes #741,closes #742,closes #743,closes #744,closes #745,closes #746,closes #747,closes #748,closes #749,closes #750,closes #751,closes #752,closes #753,closes #754,closes #755,closes #756,closes #757,closes #758,closes #759,closes #760,closes #761,closes #762,closes #763,closes #764,closes #765,closes #766,closes #767,closes #768,closes #769,closes #770,closes #771,closes #772,closes #773,closes #774,closes #775,closes #776,closes #777,closes #778,closes #779,closes #780,closes #781,closes #782,closes #783,closes #784,closes #785,closes #786,closes #787,closes #788,closes #789,closes #790,closes #791,closes #792,closes #793,closes #794,closes #795,closes #796,closes #797,closes #798,closes #799,closes #800,closes #801,closes #802,closes #803,closes #804,closes #805,closes #806,closes #807,closes #808,closes #809,closes #810,closes #811,closes #812,closes #813,closes #814,closes #815,closes #816,closes #817,closes #818,closes #819,closes #820,closes #821,closes #822,closes #823,closes #824,closes #825,closes #826,closes #827,closes #828,closes #829,closes #830,closes #831,closes #832,closes #833,closes #834,closes #835,closes #836,closes #837,closes #838,closes #839,closes #840,closes #841,closes #842,closes #843,closes #844,closes #845,closes #846,closes #847,closes #848,closes #849,closes #850,closes #851,closes #852,closes #853,closes #854,closes #855,closes #856,closes #857,closes #858,closes #859,closes #860,closes #861,closes #862,closes #863,closes #864,closes #865,closes #866,closes #867,closes #868,closes #869,closes #870,closes #871,closes #872,closes #873,closes #874,closes #875,closes #876,closes #877,closes #878,closes #879,closes #880,closes #881,closes #882,closes #883,closes #884,closes #885,closes #886,closes #887,closes #888,closes #889,closes #890,closes #891,closes #892,closes #893,closes #894,closes #895,closes #896,closes #897,closes #898,closes #899,closes #900,closes #901,closes #902,closes #903,closes #904,closes #905,closes #906,closes #907,closes #908,closes #909,closes #910,closes #911,closes #912,closes #913,closes #914,closes #915,closes #916,closes #917,closes #918,closes #919,closes #920,closes #921,closes #922,closes #923,closes #924,closes #925,closes #926,closes #927,closes #928,closes #929,closes #930,closes #931,closes #932,closes #933,closes #934,closes #935,closes #936,closes #937,closes #938,closes #939,closes #940,closes #941,closes #942,closes #943,closes #944,closes #945,closes #946,closes #947,closes #948,closes #949,closes #950,closes #951,closes #952,closes #953,closes #954,closes #955,closes #956,closes #957,closes #958,closes #959,closes #960,closes #961,closes #962,closes #963,closes #964,closes #965,closes #966,closes #967,closes #968,closes #969,closes #970,closes #971,closes #972,closes #973,closes #974,closes #975,closes #976,closes #977,closes #978,closes #979,closes #980,closes #981,closes #982,closes #983,closes #984,closes #985,closes #986,closes #987,closes #988,closes #989,closes #990,closes #991,closes #992,closes #993,closes #994,closes #995,closes #996,closes #997,closes #998,closes #999,closes #1000,closes #1001,closes #1002,closes #1003,closes #1004,closes #1005,closes #1006,closes #1007,closes #1008,closes #1009,closes #1010,closes #1011,closes #1012,closes #1013,closes #1014,closes #1015,closes #1016,closes #1017,closes #1018,closes #1019,closes #1020,closes #1021,closes #1022,closes #1023,closes #1024,closes #1025,closes #1026,closes #1027,closes #1028,closes #1029,closes #1030,closes #1031,closes #1032,closes #1033,closes #1034,closes #1035,closes #1036,closes #1037,closes #1038,closes #1039,closes #1040,closes #1041,closes #1042,closes #1043,closes #1044,closes #1045,closes #1046,closes #1047,closes #1048,closes #1049,closes #1050,closes #1051,closes #1052,closes #1053,closes #1054,closes #1055,closes #1056,closes #1057,closes #1058,closes #1059,closes #1060,closes #1061,closes #1062,closes #1063,closes #1064,closes #1065,closes #1066,closes #1067,closes #1068,closes #1069,closes #1070,closes #1071,closes #1072,closes #1073,closes #1074,closes #1075,closes #1076,closes #1077,closes #1078,closes #1079,closes #1080,closes #1081,closes #1082,closes #1083,closes #1084,closes #1085,closes #1086,closes #1087,closes #1088,closes #1089,closes #1090,closes #1091,closes #1092,closes #1093,closes #1094,closes #1095,closes #1096,closes #1097,closes #1098,closes #1099,closes #1100,closes #1101,closes #1102,closes #1103,closes #1104,closes #1105,closes #1106,closes #1107,closes #1108,closes #1109,closes #1110,closes #1111,closes #1112,closes #1113,closes #1114,closes #1115,closes #1116,closes #1117,closes #1118,closes #1119,closes #1120,closes #1121,closes #1122,closes #1123,closes #1124,closes #1125,closes #1126,closes #1127,closes #1128,closes #1129,closes #1130,closes #1131,closes #1132,closes #1133,closes #1134,closes #1135,closes #1136,closes #1137,closes #1138,closes #1139,closes #1140,closes #1141,closes #1142,closes #1143,closes #1144,closes #1145,closes #1146,closes #1147,closes #1148,closes #1149,closes #1150,closes #1151,closes #1152,closes #1153,closes #1154,closes #1155,closes #1156,closes #1157,closes #1158,closes #1159,closes #1160,closes #1161,closes #1162,closes #1163,closes #1164,closes #1165,closes #1166,closes #1167,closes #1168,closes #1169,closes #1170,closes #1171,closes #1172,closes #1173,closes #1174,closes #1175,closes #1176,closes #1177,closes #1178,closes #1179,closes #1180,closes #1181,closes #1182,closes #1183,closes #1184,closes #1185,closes #1186,closes #1187,closes #1188,closes #1189,closes #1190,closes #1191,closes #1192,closes #1193,closes #1194,closes #1195,closes #1196,closes #1197,closes #1198,closes #1199,closes #1200,closes #1201,closes #1202,closes #1203,closes #1204,closes #1205,closes #1206,closes #1207,closes #1208,closes #1209,closes #1210,closes #1211,closes #1212,closes #1213,closes #1214,closes #1215,closes #1216,closes #1217,closes #1218,closes #1219,closes #1220,closes #1221,closes #1222,closes #1223,closes #1224,closes #1225,closes #1226,closes #1227,closes #1228,closes #1229,closes #1230,closes #1231,closes #1232,closes #1233,closes #1234,closes #1235,closes #1236,closes #1237,closes #1238,closes #1239,closes #1240,closes #1241,closes #1242,closes #1243,closes #1244,closes #1245,closes #1246,closes #1247,closes #1248,closes #1249,closes #1250,closes #1251,closes #1252,closes #1253,closes #1254,closes #1255,closes #1256,closes #1257,closes #1258,closes #1259,closes #1260,closes #1261,closes #1262,closes #1263,closes #1264,closes #1265,closes #1266,closes #1267,closes #1268,closes #1269,closes #1270,closes #1271,closes #1272,closes #1273,closes #1274,closes #1275,closes #1276,closes #1277,closes #1278,closes #1279,closes #1280,closes #1281,closes #1282,closes #1283,closes #1284,closes #1285,closes #1286,closes #1287,closes #1288,closes #1289,closes #1290,closes #1291,closes #1292,closes #1293,closes #1294,closes #1295,closes #1296,closes #1297,closes #1298,closes #1299,closes #1300,closes #1301,closes #1302,closes #1303,closes #1304,closes #1305,closes #1306,closes #1307,closes #1308,closes #1309,closes #1310,closes #1311,closes #1312,closes #1313,closes #1314,closes #1315,closes #1316,closes #1317,closes #1318,closes #1319,closes #1320,closes #1321,closes #1322,closes #1323,closes #1324,closes #1325,closes #1326,closes #1327,closes #1328,closes #1329,closes #1330,closes #1331,closes #1332,closes #1333,closes #1334,closes #1335,closes #1336,closes #1337,closes #1338,closes #1339,closes #1340,closes #1341,closes #1342,closes #1343,closes #1344,closes #1345,closes #1346,closes #1347,closes #1348,closes #1349,closes #1350,closes #1351,closes #1352,closes #1353,closes #1354,closes #1355,closes #1356,closes #1357,closes #1358,closes #1359,closes #1360,closes #1361,closes #1362,closes #1363,closes #1364,closes #1365,closes #1366,closes #1367,closes #1368,closes #1369,closes #1370,closes #1371,closes #1372,closes #1373,closes #1374,closes #1375,closes #1376,closes #1377,closes #1378,closes #1379,closes #1380,closes #1381,closes #1382,closes #1383,closes #1384,closes #1385,closes #1386,closes #1387,closes #1388,closes #1389,closes #1390,closes #1391,closes #1392,closes #1393,closes #1394,closes #1395,closes #1396,closes #1397,closes #1398,closes #1399,closes #1400,closes #1401,closes #1402,closes #1403,closes #1404,closes #1405,closes #1406,closes #1407,closes #1408,closes #1409,closes #1410,closes #1411,closes #1412,closes #1413,closes #1414,closes #1415,closes #1416,closes #1417,closes #1418,closes #1419,closes #1420,closes #1421,closes #1422,closes #1423,closes #1424,closes #1425,closes #1426,closes #1427,closes #1428,closes #1429,closes #1430,closes #1431,closes #1432,closes #1433,closes #1434,closes #1435,closes #1436,closes #1437,closes #1438,closes #1439,closes #1440,closes #1441,closes #1442,closes #1443,closes #1444,closes #1445,closes #1446,closes #1447,closes #1448,closes #1449,closes #1450,closes #1451,closes #1452,closes #1453,closes #1454,closes #1455,closes #1456,closes #1457,closes #1458,closes #1459,closes #1460,closes #1461,closes #1462,closes #1463,closes #1464,closes #1465,closes #1466,closes #1467,closes #1468,closes #1469,closes #1470,closes #1471,closes #1472,closes #1473,closes #1474,closes #1475,closes #1476,closes #1477,closes #1478,closes #1479,closes #1480,closes #1481,closes #1482,closes #1483,closes #1484,closes #1485,closes #1486,closes #1487,closes #1488,closes #1489,closes #1490,closes #1491,closes #1492,closes #1493,closes #1494,closes #1495,closes #1496,closes #1497,closes #1498,closes #1499,closes #1500,closes #1501,closes #1502,closes #1503,closes #1504,closes #1505,closes #1506,closes #1507,closes #1508,closes #1509,closes #1510,closes #1511,closes #1512,closes #1513,closes #1514,closes #1515,closes #1516,closes #1517,closes #1518,closes #1519,closes #1520,closes #1521,closes #1522,closes #1523,closes #1524,closes #1525,closes #1526,closes #1527,closes #1528,closes #1529,closes #1530,closes #1531,closes #1532,closes #1533,closes #1534,closes #1535,closes #1536,closes #1537,closes #1538,closes #1539,closes #1540,closes #1541,closes #1542,closes #1543,closes #1544,closes #1545,closes #1546,closes #1547,closes #1548,closes #1549,closes #1550,closes #1551,closes #1552,closes #1553,closes #1554,closes #1555,closes #1556,closes #1557,closes #1558,closes #1559,closes #1560,closes #1561,closes #1562,closes #1563,closes #1564,closes #1565,closes #1566,closes #1567,closes #1568,closes #1569,closes #1570,closes #1571,closes #1572,closes #1573,closes #1574,closes #1575,closes #1576,closes #1577,closes #1578,closes #1579,closes #1580,closes #1581,closes #1582,closes #1583,closes #1584,closes #1585,closes #1586,closes #1587,closes #1588,closes #1589,closes #1590,closes #1591,closes #1592,closes #1593,closes #1594,closes #1595,closes #1596,closes #1597,closes #1598,closes #1599,closes #1600,closes #1601,closes #1602,closes #1603,closes #1604,closes #1605,closes #1606,closes #1607,closes #1608,closes #1609,closes #1610,closes #1611,closes #1612,closes #1613,closes #1614,closes #1615,closes #1616,closes #1617,closes #1618,closes #1619,closes #1620,closes #1621,closes #1622,closes #1623,closes #1624,closes #1625,closes #1626,closes #1627,closes #1628,closes #1629,closes #1630,closes #1631,closes #1632,closes #1633,closes #1634,closes #1635,closes #1636,closes #1637,closes #1638,closes #1639,closes #1640,closes #1641,closes #1642,closes #1643,closes #1644,closes #1645,closes #1646,closes #1647,closes #1648,closes #1649,closes #1650,closes #1651,closes #1652,closes #1653,closes #1654,closes #1655,closes #1656,closes #1657,closes #1658,closes #1659,closes #1660,closes #1661,closes #1662,closes #1663,closes #1664,closes #1665,closes #1666,closes #1667,closes #1668,closes #1669,closes #1670,closes #1671,closes #1672,closes #1673,closes #1674,closes #1675,closes #1676,closes #1677,closes #1678,closes #1679,closes #1680,closes #1681,closes #1682,closes #1683,closes #1684,closes #1685,closes #1686,closes #1687,closes #1688,closes #1689,closes #1690,closes #1691,closes #1692,closes #1693,closes #1694,closes #1695,closes #1696,closes #1697,closes #1698,closes #1699,closes #1700,closes #1701,closes #1702,closes #1703,closes #1704,closes #1705,closes #1706,closes #1707,closes #1708,closes #1709,closes #1710,closes #1711,closes #1712,closes #1713,closes #1714,closes #1715,closes #1716,closes #1717,closes #1718,closes #1719,closes #1720,closes #1721,closes #1722,closes #1723,closes #1724,closes #1725,closes #1726,closes #1727,closes #1728,closes #1729,closes #1730,closes #1731,closes #1732,closes #1733,closes #1734,closes #1735,closes #1736,closes #1737,closes #1738,closes #1739,closes #1740,closes #1741,closes #1742,closes #1743,closes #1744,closes #1745,closes #1746,closes #1747,closes #1748,closes #1749,closes #1750,closes #1751,closes #1752,closes #1753,closes #1754,closes #1755,closes #1756,closes #1757,closes #1758,closes #1759,closes #1760,closes #1761,closes #1762,closes #1763,closes #1764,closes #1765,closes #1766,closes #1767,closes #1768,closes #1769,closes #1770,closes #1771,closes #1772,closes #1773,closes #1774,closes #1775,closes #1776,closes #1777,closes #1778,closes #1779,closes #1780,closes #1781,closes #1782,closes #1783,closes #1784,closes #1785,closes #1786,closes #1787,closes #1788,closes #1789,closes #1790,closes #1791,closes #1792,closes #1793,closes #1794,closes #1795,closes #1796,closes #1797,closes #1798,closes #1799,closes #1800,closes #1801,closes #1802,closes #1803,closes #1804,closes #1805,closes #1806,closes #1807,closes #1808,closes #1809,closes #1810,closes #1811,closes #1812,closes #1813,closes #1814,closes #1815,closes #1816,closes #1817,closes #1818,closes #1819,closes #1820,closes #1821,closes #1822,closes #1823,closes #1824,closes #1825,closes #1826,closes #1827,closes #1828,closes #1829,closes #1830,closes #1831,closes #1832,closes #1833,closes #1834,closes #1835,closes #1836,closes #1837,closes #1838,closes #1839,closes #1840,closes #1841,closes #1842,closes #1843,closes #1844,closes #1845,closes #1846,closes #1847,closes #1848,closes #1849,closes #1850,closes #1851,closes #1852,closes #1853,closes #1854,closes #1855,closes #1856,closes #1857,closes #1858,closes #1859,closes #1860,closes #1861,closes #1862,closes #1863,closes #1864,closes #1865,closes #1866,closes #1867,closes #1868,closes #1869,closes #1870,closes #1871,closes #1872,closes #1873,closes #1874,closes #1875,closes #1876,closes #1877,closes #1878,closes #1879,closes #1880,closes #1881,closes #1882,closes #1883,closes #1884,closes #1885,closes #1886,closes #1887,closes #1888,closes #1889,closes #1890,closes #1891,closes #1892,closes #1893,closes #1894,closes #1895,closes #1896,closes #1897,closes #1898,closes #1899,closes #1900,closes #1901,closes #1902,closes #1903,closes #1904,closes #1905,closes #1906,closes #1907,closes #1908,closes #1909,closes #1910,closes #1911,closes #1912,closes #1913,closes #1914,closes #1915,closes #1916,closes #1917,closes #1918,closes #1919,closes #1920,closes #1921,closes #1922,closes #1923,closes #1924,closes #1925,closes #1926,closes #1927,closes #1928,closes #1929,closes #1930,closes #1931,closes #1932,closes #1933,closes #1934,closes #1935,closes #1936,closes #1937,closes #1938,closes #1939,closes #1940,closes #1941,closes #1942,closes #1943,closes #1944,closes #1945,closes #1946,closes #1947,closes #1948,closes #1949,closes #1950,closes #1951,closes #1952,closes #1953,closes #1954,closes #1955,closes #1956,closes #1957,closes #1958,closes #1959,closes #1960,closes #1961,closes #1962,closes #1963,closes #1964,closes #1965,closes #1966,closes #1967,closes #1968,closes #1969,closes #1970,closes #1971,closes #1972,closes #1973
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants